Implementing computing systems that manage large quantities of data and/or service large numbers of users often presents problems of scale. For example, as demand for various types of computing services grow, servicing that demand may become difficult without increasing the available computing resources accordingly. To facilitate scaling of computing resources in order to meet demand, a particular computing service may be implemented as a distributed application that executes on a number of computing hardware devices (e.g., server systems) or virtualized computing instances (e.g., virtual server systems). For example, a number of different software processes executing on different computing systems may operate cooperatively to implement the computing service. When more service capacity is needed, additional hardware and/or software resources may be deployed.
Managing the provisioning of computing instances or computing hardware in computing service environments can be highly complex, due to the ever changing dynamics of application behavior in computing service environments. In particular, and by way of example, manually starting and stopping computing instances and any related virtual machines may be time consuming, inefficient and may be inadequate in responding to network conditions.
Computing resource scaling technologies are sometimes inefficient and insufficient because of the nature of changing demands. Consequently, traditional scaling technologies may improperly provision computing resources to accommodate perceived demand, and may negatively impact the quality of service or even interrupt the computing service. Service providers may end up choosing between expensive over-provisioning of computing resources or less-expensive but insufficient or inefficient computing resources for a particular demand.